package service;

import hbt.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

import modelo.AperturaMesaDao;
import entities.*;
import beans.*;

public class AperturaMesaSrv {
	
	private static AperturaMesaSrv instancia = null;
	//private static AperturaMesaDao dao;
	
	public static AperturaMesaSrv getInstancia() {
		if( instancia == null) {
			instancia = new AperturaMesaSrv();
			//dao = new AperturaMesaDao();
		}
		return instancia;
	}
	/**
	 * 
	 * @param AmEntity
	 * @return
	 */
	public AperturaMesaBean entity2Bean(AperturaMesaEntity AmEntity) {
		AperturaMesaBean bean = new AperturaMesaBean();
		bean.setCantComensales(AmEntity.getCantComensales());
		bean.setEstado(AmEntity.getEstado());
		bean.setFecha(AmEntity.getFecha());
		bean.setIdAperturaMesa(AmEntity.getId());
		
		bean.setMozo(MozoSrv.getInstancia().entity2Bean(AmEntity.getMozo()));
		
		List<MesaBean> mesasBean = new ArrayList<MesaBean>();
		for (MesaEntity mesaEntity: AmEntity.getMesas()) {
			MesaBean mesaBean = MesaSrv.getInstancia().entity2Bean(mesaEntity);
			mesasBean.add(mesaBean);
		}
		bean.setMesas(mesasBean);
		
		List<PedidoBean> pedidosBean = new ArrayList<PedidoBean>();
		for (PedidoEntity pedidoEntity: AmEntity.getPedidos()) {
			PedidoBean pedidoBean = PedidoSrv.getInstancia().entity2Bean(pedidoEntity);
			pedidosBean.add(pedidoBean);
		}
		bean.setPedidos(pedidosBean);

		return bean;
	}
	
	/**
	 * 
	 * @param bean
	 * @return
	 */
	public AperturaMesaEntity bean2Entity( AperturaMesaBean bean) {
		
		AperturaMesaEntity entity = new AperturaMesaEntity();
		entity.setId(bean.getIdAperturaMesa());
		entity.setCantComensales(bean.getCantComensales());
		entity.setEstado(bean.getEstado());
		entity.setFecha(bean.getFecha());
		
		entity.setMozo(MozoSrv.getInstancia().bean2entity(bean.getMozo()));
		
		List<MesaEntity> mesasEntity = new ArrayList<MesaEntity>();
		for (MesaBean mesaBean: bean.getMesas()) {
			MesaEntity mesaEntity = MesaSrv.getInstancia().bean2Entity(mesaBean);
			mesasEntity.add(mesaEntity);
		}
		entity.setMesas(mesasEntity);
		
		List<PedidoEntity> pedidosEntity = new ArrayList<PedidoEntity>();
		for (PedidoBean pedidoBean: bean.getPedidos()) {
			PedidoEntity pedidoEntity = PedidoSrv.getInstancia().bean2Entity(pedidoBean);
			pedidosEntity.add(pedidoEntity);
		}
		entity.setPedidos(pedidosEntity);
		
		return entity;
	}
	
	/**
	 * 
	 * @param aperturaMesa
	 */
	public boolean guardarAperturaMesa(AperturaMesaBean aperturaMesa,Integer sucursal) {
		AperturaMesaEntity ame = this.bean2Entity(aperturaMesa);
		boolean guardar = AperturaMesaDao.getInstancia().save(ame);
		System.out.println("Sucursal "+sucursal);
		Integer idAperturaMesa = AperturaMesaDao.getInstancia().obtenerUltimoIdAperturaMesa();
		
		PreparedStatement stmt = null;
			Connection con = null;
			try {
				String query = "UPDATE aperturasMesas SET idSucursal = ? WHERE id = ?";
				con = DataSource.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1,sucursal);
				stmt.setInt(2,idAperturaMesa);
				System.out.println("Sucursal "+sucursal);
				stmt.execute();
				
			} 
			catch (Exception e) {
				e.printStackTrace();
			} finally {
				DataSource.cerrarConexion(stmt);
			}
		
		return guardar;
		
	}
	/**
	 * 
	 * @param legajo
	 * @return
	 */
	public List<AperturaMesaBean> obtenerAperturasPorMozo(Integer legajo) {
		
		List<AperturaMesaEntity> listaEntities = AperturaMesaDao.getInstancia().obtenerAperturasPorMozo(legajo);
		List<AperturaMesaBean> listaBeans = new ArrayList<AperturaMesaBean>();
		for (AperturaMesaEntity entity : listaEntities) {
			AperturaMesaBean bean = this.entity2Bean(entity);
			listaBeans.add(bean);
		}
		return listaBeans;
	}

	

	public boolean modificarAperturaMesa(AperturaMesaBean aperturaMesa) {
		AperturaMesaEntity ame = this.bean2Entity(aperturaMesa);
		boolean guardar = AperturaMesaDao.getInstancia().merge(ame);
		
		return guardar;	
	}
	
	public AperturaMesaBean obtenerAperturasPorId(Integer id) {
		
		AperturaMesaEntity apmesaentity = AperturaMesaDao.getInstancia().obtenerAperturasPorID(id);
		AperturaMesaBean apmesaBean =  this.entity2Bean(apmesaentity);	
	
		return apmesaBean;
	}
}